<?php

/**
 * winbinder 패키지 
 * 
 * 
 * @package php.ui.winbinder
 */

/**
 * WBImage 클래스 
 *
 * @package php.ui.winbinder
 */
class WBImage extends WBObject { 

	private $_instance;
	private $_path;
	
	/**
	 * 생성자 
	 * 
	 * @param array $options 옵션 리스트 
	 */
	public function __construct($options = array()) { 
		parent::__construct($options);
		
		$this->create();
	}
	
	public function __destruct() {
		if ($this->_instance) {
			$this->destroy();
		}
	}

	/**
	 * 파일로 WBImage 객체 생성 
	 * 
	 * @param string $path bmp 파일 경로 
	 */
	public static function loadFile($path) { 

		if (realpath($path)) { 
			$image = new WBImage(array('path' => realpath($path)));
			$image->load();

			return $image;
		} else { 
			return null; 
		}
	}
	
	public function getGraphics() { 
		return new WBGraphics($this->_instance, null);
	}

	/** 
	 * 생성된 이미지 instance 가지고 오기 
	 *
	 * @return resource 
	 */ 
	public function getInstance() { 
		return $this->_instance;
	}

	/**
	 * 이미지 instance 설정 
	 *
	 * 
	 */
	public function setInstance($instance) { 
		$this->_instance = $instance;
	}

	/**
	 * 옵션으로 설정된 width, height를 가지고 이미지 생성 
	 *
	 * 
	 */
	public function create() { 
		
		if ($this->getOption('header') && $this->getOption('bits')) {  
			$instance = wb_create_image($this->getOption('width'), $this->getOption('height'), $this->getOption('header'), $this->getOption('bits'));
		} else { 
			$instance = wb_create_image($this->getOption('width'), $this->getOption('height'));
		} 
		
		$this->setInstance($instance);
	}

	/** 
	 * mask image 생성 , 구현예정 
	 * 
	 */
	public function createMask() { 
		//$this->setInstance(wb_create_mask());
	}
		
	/**
	 * path 옵션으로 image loading 
	 *
	 * 
	 */
	public function load() { 
		$this->setInstance(wb_load_image($this->getOption('path')));
	}

	/**
	 * 이미지 메모리 해제 
	 *
	 *
	 */
	public function destroy() { 
		if ($this->getInstance()) { 
			wb_destroy_image($this->getInstance());
		}
	}

	/** 
	 * 이미지 사이즈 구하기 
	 *
	 * @return array 이미지 사이즈, width, height
	 */
	public function getSize() { 
		$arr = wb_get_size($this->getInstance());

		return array('width' => $arr[0], 'height' => $arr[1]);
	}

	/** 
	 * 이미지 데이타 얻오기 
	 *
	 * @param bool $compress 압축 비율, true 이면 32bit, false 이면 24bit 
	 * @return binary 이미지 데이타 
	 */
	public function getData($compress = true) { 
		return wb_get_image_data($this->getInstance(), $compress);
	}

	/**
	 * 이미지 데이타 파일로 저장 
	 *
	 * @param string $filename 저장될 파일이름, bmp 만 지원 
	 * @return bool true이면 생성, false 이면 생성실패 
	 */
	public function save($filename) { 
		return wb_save_image($this->getInstance(), $filename);
	}

}

?>